﻿#define _CRT_SECURE_NO_WARNINGS
//#include <iostream>
//#include <string>
//
//using namespace std;
//
//bool is_palindrome(string& s, int left, int right)
//{
//	while (left < right)
//	{
//		if (s[left] == s[right])
//			left++, right--;
//		else return false;
//	}
//	return true;
//}
//bool can_split(string& s)
//{
//	int length = s.size();
//	//保证至少2个字符
//	for (int i = 1; i < length - 2; i++)
//	{
//		if (is_palindrome(s, 0, i) && is_palindrome(s, i + 1, length - 1))
//			return true;
//	}
//	return false;
//}
//
//int main()
//{
//	int n;
//	string s;
//	cin >> n;
//	while (n--)
//	{
//		cin >> s;
//
//		if (can_split(s))
//			cout << "Yes" << endl;
//		else cout << "No" << endl;
//	}
//	return 0;
//}

//#include <iostream>
//#include <string>
//
//using namespace std;
//
//// 判断子串 s[left..right] 是否是回文
//bool isPalindrome(const string& s, int left, int right) {
//	while (left < right) {
//		if (s[left] != s[right]) {
//			return false;
//		}
//		left++;
//		right--;
//	}
//	return true;
//}
//
//// 判断字符串是否可以拆分成两个长度≥2的回文子串
//bool canSplit(const string& s) {
//	int n = s.size();
//	// 遍历所有可能的分割点（确保前后部分长度≥2）
//	for (int i = 1; i <= n - 2; i++) {
//		if (isPalindrome(s, 0, i) && isPalindrome(s, i + 1, n - 1)) {
//			return true;
//		}
//	}
//	return false;
//}
//
//int main() {
//	int n;
//	cin >> n;
//	while (n--) {
//		string s;
//		cin >> s;
//		if (canSplit(s)) {
//			cout << "Yes" << endl;
//		}
//		else {
//			cout << "No" << endl;
//		}
//	}
//	return 0;
//}


//#include <iostream>
//#include <string>
//#include <vector>
//
//
//using namespace std;
//int main()
//{
//	int n, k;
//	cin >> n >> k;
//	vector<int> arr(n);
//	for (int i = 0; i < n; i++)
//		cin >> arr[i];
//
//	long long num, count = 0;
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			if (i == j) continue;
//			else
//			{
//				string s1 = to_string(arr[i]);
//				string s2 = to_string(arr[j]);
//				string s3 = s1 + s2;
//				num = stoll(s3);
//				if (num % k == 0)
//					count++;
//			}
//		}
//	}
//	cout << count;
//	return 0;
//}

//struct info 
//{ 
//	char name[20];
//	char sex[5];
//	int age;
//	int id;
//}stu;

//struct tag
//{
//	members;
//}variable_name;

//#include <stdio.h> 
//struct Stu 
//{ 
//	char name[20];//名字 
//	int age;//年龄 
//	char sex[5];//性别 
//	char id[20];//学号 
//}; 
//int main()
//{
//	//按照结构体成员的顺序初始化 
//	struct Stu s = { "张三", 20, "男", "20230818001" }; 
//	printf("name: %s\n", s.name); 
//	printf("age : %d\n", s.age); 
//	printf("sex : %s\n", s.sex); 
//	printf("id : %s\n", s.id);
//	//按照指定的顺序初始化 
//	struct Stu s2 = { .age = 18, .name = "lisi", .id = "20230818002", .sex = "⼥" }; 
//	printf("name: %s\n", s2.name); 
//	printf("age : %d\n", s2.age); 
//	printf("sex : %s\n", s2.sex); 
//	printf("id : %s\n", s2.id); 
//	return 0; 
//}


//匿名结构体
//struct 
//{
//	int a;
//	char b;
//	float c;
//}t;
//
//struct
//{
//	int a;
//	char b;
//	float c;
//}t[20], *p;



//typedef struct Node
//{
//	int data;
//	struct Node* next;
//}Node;


//struct {
//	int age;
//	char c;
//};
//
//struct p;

//#include <iostream>
//#include <cstddef>
//typedef struct s1
//{ 
//	char c1; 
//	int i; 
//	char c2; 
//}s1; 
//int main()
//{
//	//首个成员放在0偏移位置
//	printf("%zd\n", offsetof(s1, c1));
//	//对齐数 = min(int, 8)，找到最近的4偏移的倍数的位置，4~7
//	printf("%zd\n", offsetof(s1, i));
//	//对齐数 = min(char, 8)，找到最近的1偏移的倍数的位置，7~8
//	printf("%zd\n", offsetof(s1, c2));
//	//0~8为9，不是最大对齐数的整数倍，则sizeof(s1)应该为12
//	printf("%zd\n", sizeof(s1));
//}


//#include <iostream>
//#include <cstddef>
//typedef struct s1
//{
//	double d;
//	char c;
//	int i;
//}s1;
//
//typedef struct s2{ 
//	char c1; 
//	s1 s; 
//	double d;
//}s2; 
//
//int main()
//{
//	//首个成员放在0偏移位置，0
//	printf("%zd\n", offsetof(s2, c1));
//	//对齐数 = max(all members 的对齐数) = 8，找到最近的8偏移的倍数的位置，8~23
//	printf("%zd\n", offsetof(s2, s));
//	//对齐数 = min(double, 8)，找到最近的8偏移的倍数的位置，24~31
//	printf("%zd\n", offsetof(s2, d));
//	//0~31为32，是最大对齐数的整数倍，则sizeof(s2)应该为32
//	printf("%zd\n", sizeof(s2));
//}

#include <stdio.h>

#pragma pack(1)//设置默认对⻬数为1
struct S
{
	char c1;
	int i;
	char c2;
};
#pragma pack()//取消设置的对⻬数，还原为默认

int main()
{
	//输出的结果是什么？
	printf("%zd\n", sizeof(struct S));
	return 0;
}